
from datetime import datetime
from flask_sqlalchemy import SQLAlchemy

from flask_mongoengine import MongoEngine
from mongoengine.fields import IntField,StringField,BooleanField,ObjectIdField,DateTimeField

db = SQLAlchemy()

mongodb = MongoEngine()

# 创建新闻模型类（继承db.model）
class News(db.Model):
    # 新闻模型
    __tablename__ = 'news'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(200), nullable=False, comment='标题')
    img_url = db.Column(db.String(200), nullable=False, comment='主图地址')
    content = db.Column(db.String(200), nullable=False, comment='新闻内容')
    is_valid = db.Column(db.Boolean, default=True, comment='逻辑删除')
    is_top = db.Column(db.Boolean, default=True, comment='是否置顶')
    created_at = db.Column(db.DateTime, default=datetime.now(), comment='创建时间')
    updated_at = db.Column(db.DateTime, default=datetime.now(), comment='最后修改时间')
    news_type = db.Column(db.Enum('本地', '百家', '娱乐', '军事'), comment='新闻类别')

    # 评论列表
    def get_comments(self):
        # 后续可以实现分页
        queryset = Comments.objects.filter(object_id=self.id,is_valid=True)
        return queryset

    # 缓存信息的时候做个转换（因为DateTime没法做json转换,所以要重写信息）
    def to_dict(self):
        return {
            'id':self.id,
            'title':self.title,
            'img_url':self.img_url,
            'content':self.content,
            'news_type':self.news_type,
            'created_at':self.created_at.strftime('%Y-%m-%d')
        }






# mongodb模型不需要同步数据库  使用的时候自动创建  但是要先建个数据库
class Comments(mongodb.Document):
    # 评论的ODM模型
    # 新闻（对象）ID,评论内容,逻辑删除,评论回复的ID,评论ID，新增时间，修改时间
    object_id = IntField(required=True,verbose_name='关联的对象（新闻的ID）')
    content = StringField(required=True,max_length=2000,verbose_name='评论的内容')
    is_valid = BooleanField(default=True, verbose_name='是否有效')
    reply_id = ObjectIdField(verbose_name='回复评论的ID')
    created_at = DateTimeField(default=datetime.now(), verbose_name='创建时间')
    updated_at = DateTimeField(default=datetime.now(), verbose_name='最后修改时间')

    meta = {
        # 所存放的集合
        "collection":"comments",
        # 排序规则：是否有效（有效的在前）、发布的时间倒序
        'ordering':['-is_valid','-created_at']
    }

    @property
    def news_obj(self):
        # 新闻的对象
        return News.query.get(self.object_id)

    def __str__(self):
        return f'Comments：{self.content}'




